﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Biz_Dal.Biz;
using System.Data.Linq.SqlClient;

namespace Biz_Dal.Dal
{
    public class DalTheLoai
    {
        //BookIdeas_ShopDataContext dal.BookIdeas_ShopDataContext = new BookIdeas_ShopDataContext();

        internal static int CountListTheLoai()
        {
            DalCommon dal = new DalCommon();
            var query = (from vt in dal.BookIdeas_ShopDataContext.TheLoais select vt).Distinct().Count();
            return query;
        }

        //lấy id mới
        internal static int IdMaxTheLoai()
        {
            DalCommon dal = new DalCommon();
            int intIdt = dal.BookIdeas_ShopDataContext.TheLoais.Max(u => u.idTheLoai);
            return intIdt;
        }

        //Lấy danh thể loại tất cả các thể loại
        internal static List<BizTheLoai> getListTheLoaiAll()
        {
            DalCommon dal = new DalCommon();
            var query = (from vt in dal.BookIdeas_ShopDataContext.TheLoais
                         orderby vt.maTheLoai descending
                         select new BizTheLoai
                         {
                             idTheLoai=vt.idTheLoai,
                             maTheLoai = vt.maTheLoai,
                             tenTheLoai = vt.tenTheLoai,
                         }).Distinct<BizTheLoai>();

            return query.ToList<BizTheLoai>();
        }

        //Danh thể loại các thể loại có id thể loại được nhập vào
        internal static BizTheLoai getTheLoaiByID(int idTheLoai)
        {
            DalCommon dal = new DalCommon();
            var querry = (from vt in dal.BookIdeas_ShopDataContext.TheLoais
                          where vt.idTheLoai == idTheLoai
                          select new BizTheLoai
                          {
                              idTheLoai=vt.idTheLoai,
                              maTheLoai = vt.maTheLoai,
                              tenTheLoai = vt.tenTheLoai,
                          }).Distinct<BizTheLoai>();
            if (querry.Count() == 0)
            {
                return null;
            }
            else
            {
                return querry.Single<BizTheLoai>();
            }
        }

        //Lấy danh thể loại tất cả các thể loại có tên được nhập vào
        internal static List<BizTheLoai> getListTheLoaiByName(string name)
        {
            DalCommon dal = new DalCommon();
            var querry = (from vt in dal.BookIdeas_ShopDataContext.TheLoais
                          where vt.tenTheLoai == name
                          select new BizTheLoai
                          {
                              idTheLoai=vt.idTheLoai,
                              maTheLoai = vt.maTheLoai,
                              tenTheLoai = vt.tenTheLoai,
                          }).Distinct<BizTheLoai>();
            if (querry.Count() == 0)
            {
                return null;
            }
            else
            {
                return querry.ToList<BizTheLoai>();
            }
        }


        //Danh thể loại gần đúng các thể loại có mã thể loại được nhập vào
        internal static List<BizTheLoai> getLikeTheLoaiByMa(string maTheLoai)
        {
            DalCommon dal = new DalCommon();
            var querry = (from vt in dal.BookIdeas_ShopDataContext.TheLoais
                          where SqlMethods.Like(vt.maTheLoai, "%" + maTheLoai + "%")
                          select new BizTheLoai
                          {
                              idTheLoai=vt.idTheLoai,
                              maTheLoai = vt.maTheLoai,
                              tenTheLoai = vt.tenTheLoai,
                          }).Distinct<BizTheLoai>();
            if (querry.Count() == 0)
            {
                return null;
            }
            else
            {
                return querry.ToList<BizTheLoai>();
            }
        }

        //Lấy danh thể loại gần đúng tất cả các thể loại có tên được nhập vào
        internal static List<BizTheLoai> getListLikeTheLoaiByName(string name)
        {
            DalCommon dal = new DalCommon();
            var querry = (from vt in dal.BookIdeas_ShopDataContext.TheLoais
                          where SqlMethods.Like(vt.tenTheLoai, "%" + name + "%")
                          select new BizTheLoai
                          {
                              idTheLoai = vt.idTheLoai,
                              maTheLoai = vt.maTheLoai,
                              tenTheLoai = vt.tenTheLoai,
                          }).Distinct<BizTheLoai>();
            if (querry.Count() == 0)
            {
                return null;
            }
            else
            {
                return querry.ToList<BizTheLoai>();
            }
        }

        //Thêm thể loại
        internal static void insertTheLoai(BizTheLoai vtDTO)
        {
            DalCommon dal = new DalCommon();
            TheLoai vt = new TheLoai();
            vt.maTheLoai = vtDTO.maTheLoai;
            vt.tenTheLoai = vtDTO.tenTheLoai;
            dal.BookIdeas_ShopDataContext.TheLoais.InsertOnSubmit(vt);
            dal.BookIdeas_ShopDataContext.SubmitChanges();
        }

        //Xóa thể loại
        internal static void deleteTheLoai(string maTheLoai)
        {
            DalCommon dal = new DalCommon();
            IEnumerable<TheLoai> list = from vt in dal.BookIdeas_ShopDataContext.TheLoais
                                     where vt.maTheLoai == maTheLoai
                                     select vt;
            foreach (TheLoai querry in list)
            {
                dal.BookIdeas_ShopDataContext.TheLoais.DeleteOnSubmit(querry);
            }
            dal.BookIdeas_ShopDataContext.SubmitChanges();
        }

        //Sửa thể loại
        internal static void updateTheLoai(BizTheLoai vtDTO)
        {
            DalCommon dal = new DalCommon();
            var querry = (from vt in dal.BookIdeas_ShopDataContext.TheLoais
                          where vt.maTheLoai == vtDTO.maTheLoai
                          select vt).FirstOrDefault<TheLoai>();
            querry.tenTheLoai = vtDTO.tenTheLoai;
            dal.BookIdeas_ShopDataContext.SubmitChanges();
        }
    }
}
